//
//  LSZHomeController.swift
//  醒浪微博
//
//  Created by 雷顺哲 on 16/7/9.
//  Copyright © 2016年 LSZ. All rights reserved.
//

import UIKit
import SVProgressHUD

//重用标识
private let HomeTableViewCellIdentifier = "HomeTableViewCellIdentifier"
class LSZHomeController: LSZVisitorTableViewController {

//    懒加载viewModel对象
    private lazy var statusListViewModel: LSZStatusListViewModel = LSZStatusListViewModel()
    // MARK:懒加载控件
    private lazy var pullUpView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicatorView.color = UIColor.redColor()
        return indicatorView
    }()
    
//    使用系统的下拉刷新
//    private lazy var pullDownView: UIRefreshControl = {
//        let ctr = UIRefreshControl()
////        添加下拉刷新的事件
//        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
//        return ctr
//    }()
    
//    使用自定义的下拉刷新
    private lazy var pullDownView: LSZRefreshControl = {
        let ctr = LSZRefreshControl()
//        添加下拉刷新事件
        ctr.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        return ctr
    }()
    
//    tipLabel
    private lazy var tipLabel:  UILabel = {
       let label = UILabel(textColor: UIColor.whiteColor(), fontSize: 12)
        label.backgroundColor = UIColor.orangeColor()
        label.textAlignment = .Center
//        默认情况下隐藏
        label.hidden = true
        return label
    }()
    
    
//    微博的数据列表,是数组
//    var statusList: [LSZStatus]?
    override func viewDidLoad() {
        super.viewDidLoad()

        if isLogin {
            setUpTableView()
            loadStatus()
            setUpUI()
            
        }else {
            vistorView?.updataVisitorInfo(message: nil, imageName: nil)
        }
    }
    
//    添加控件设置约束
    private func setUpUI(){
        guard let nav = self.navigationController else {
            return
        }
//        添加到navigationController视图上,navigationBar的后面
        nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
        tipLabel.frame = CGRect(x: 0, y: 64 - 30, width: nav.navigationBar.width, height: 30)
    }
    
    // MARK: 开启tip动画
    private func startAnimation(message: String) {
//        如果在执行动画就不需要再次执行
        if tipLabel.hidden == false {
            return
        }
        
//        显示tipLabel
        tipLabel.hidden = false
//        设置tip动画显示的内容
        tipLabel.text = message
        UIView.animateWithDuration(1, animations: { () -> Void in
             self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.height)
            }) { (_) -> Void in
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.tipLabel.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                        //  动画执行完成以后隐藏tipLabel
                        self.tipLabel.hidden = true
                })
        }
        
    }

//    注册cell
    private func setUpTableView() {
        tableView.registerClass(LSZStatusTableViewCell.self , forCellReuseIdentifier: HomeTableViewCellIdentifier)
//        去掉分割线
        tableView.separatorStyle = .None
//        设置自动行高,通过约束设置高度
        tableView.rowHeight = UITableViewAutomaticDimension
//        设置预估行高
        tableView.estimatedRowHeight = 200
        
//              tableView.addSubview(pullDownView)
//      集成系统的下拉刷新,有两种方式
//        第一种直接设置UITableViewController里的refreshControl的属性
//              self.refreshControl = pullDownView
//      第二种方式如果你的控制器不是UITableViewController, 那么你应该有tabelView
//        使用tableView直接添加UIRefreshControl然后给我们集成下拉刷新的效果
//              tableView.addSubview(pullDownView)
        tableView.addSubview(pullDownView)
        
//        添加footView
        tableView.tableFooterView = pullUpView
//        指定大小
        pullUpView.sizeToFit()
    }
    
//    下拉刷新
    @objc private func pullDownRefresh() {
        loadStatus()
    }
    
//    结束刷新
    private func endRefreshing() {
        //  停止动画
        pullUpView.stopAnimating()
        //  结束系统的下拉刷新
//        pullDownView.endRefreshing()
        //  自定义下拉刷新
        pullDownView.endRefreshing()
        
    }

//    加载微博数据
    private func loadStatus() {
        
        statusListViewModel.loadStatus(pullUpView.isAnimating()) { (isSuccess, message) -> () in
    //  pullUpView.isAnimating() , 如果这个值为true,开启菊花转,执行上拉加载,否则 进行下拉刷新或者得到最信息数据
            
            if !self.pullUpView.isAnimating() {
//                开启tip动画
                self.startAnimation(message)
            }
            
            
//            结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
//        LSZNetworkTools.sharedToos.loadStatus { (response, error) -> () in
//            if error != nil {
//                return
//            }
//            guard let dic = response as? [String : AnyObject] else{
//                return
//            }
////            执行到此说明dic的是字典的格式
//            guard let statusDicArray = dic["statuses"] as? [[String :AnyObject]] else{
//                return
//            }
//            
////            遍历数组,字典转模型
////            创建可变数组
//            var tempArr = [LSZStatus]()
//            
//            for statusDic in statusDicArray {
//                
//                let ststus = LSZStatus(dic: statusDic)
//                tempArr.append(ststus)
//            }
//            self.statusList = tempArr
//            
//           self.tableView.reloadData()
//        }
    }

}

   // MARK:tableView的数据源方法
extension LSZHomeController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return  statusListViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
             let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifier, forIndexPath: indexPath) as! LSZStatusTableViewCell
        
//        设置没有选中颜色
        cell.selectionStyle = .None
        
        let statusViewModel = statusListViewModel.statusList[indexPath.row]
        
        cell.statusViewModel = statusViewModel
        
        
        return cell
    }
    
//    将要显示的那个cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpView.isAnimating() {
//            开启菊花转
            pullUpView.startAnimating()
//            请求数据
            loadStatus()
        }
    }
  
}




  